package likou;

/**
 * @author: 唐小尊
 * @email: 1171702529@qq.com
 * @cate: 2021/08/21 10:25
 */
public class _123 {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        int[] states = new int[]{-prices[0], 0, -prices[0], 0};
        for (int i = 1; i < n; i++) {
            int pre0 = states[0];
            int pre2 = states[2];
            states[0] = Math.max(-prices[i], states[0]);//第一次买最优
            states[2] = Math.max(states[2], states[1] - prices[i]);//第二次买最优
            states[1] = Math.max(prices[i] + pre0, states[1]);//第一次卖最优
            states[3] = Math.max(prices[i] + pre2, states[3]);//第二次卖最优
        }
        return states[3];
    }

    public int maxProfit2(int[] prices) {
        int n = prices.length;
        int buy1 = -prices[0], sell1 = 0;
        int buy2 = -prices[0], sell2 = 0;
        for (int i = 1; i < n; ++i) {
            buy1 = Math.max(buy1, -prices[i]);
            sell1 = Math.max(sell1, buy1 + prices[i]);
            buy2 = Math.max(buy2, sell1 - prices[i]);
            sell2 = Math.max(sell2, buy2 + prices[i]);
        }
        return sell2;
    }
}
